From dbb1abd81489be61a01d69ef37810caa32dae448 Mon Sep 17 00:00:00 2001 From: Orestis Floros Date: Sat, 31 Mar 2018 17:26:58 +0300 Subject: [PATCH] cargo_new: remove redundant leading new lines from ignore files Only add a leading new line in .gitignore/.hgignore/.ignore files when the file existed before 'cargo new'. Fixes #5265. --- src/cargo/ops/cargo_new.rs | 14 +++++++++++-- tests/testsuite/init.rs | 42 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/cargo/ops/cargo_new.rs b/src/cargo/ops/cargo_new.rs index 4d53ede2f..7ac60bdfe 100644 --- a/src/cargo/ops/cargo_new.rs +++ b/src/cargo/ops/cargo_new.rs @@ -420,7 +420,6 @@ fn mk(config: &Config, opts: &MkOptions) -> CargoResult<()> { let cfg = global_config(config)?; // Please ensure that ignore and hgignore are in sync. let ignore = [ - "\n", "/target\n", "**/*.rs.bk\n", if !opts.bin { "Cargo.lock\n" } else { "" }, @@ -429,7 +428,6 @@ fn mk(config: &Config, opts: &MkOptions) -> CargoResult<()> { // file will exclude too much. Instead, use regexp-based ignores. See 'hg help ignore' for // more. let hgignore = [ - "\n", "^target/\n", "glob:*.rs.bk\n", if !opts.bin { "glob:Cargo.lock\n" } else { "" }, @@ -449,18 +447,30 @@ fn mk(config: &Config, opts: &MkOptions) -> CargoResult<()> { if !fs::metadata(&path.join(".git")).is_ok() { GitRepo::init(path, config.cwd())?; } + let ignore = match fs::metadata(&path.join(".gitignore")) { + Ok(_) => format!("\n{}", ignore), + _ => ignore, + }; paths::append(&path.join(".gitignore"), ignore.as_bytes())?; } VersionControl::Hg => { if !fs::metadata(&path.join(".hg")).is_ok() { HgRepo::init(path, config.cwd())?; } + let hgignore = match fs::metadata(&path.join(".hgignore")) { + Ok(_) => format!("\n{}", hgignore), + _ => hgignore, + }; paths::append(&path.join(".hgignore"), hgignore.as_bytes())?; } VersionControl::Pijul => { if !fs::metadata(&path.join(".pijul")).is_ok() { PijulRepo::init(path, config.cwd())?; } + let ignore = match fs::metadata(&path.join(".ignore")) { + Ok(_) => format!("\n{}", ignore), + _ => ignore, + }; paths::append(&path.join(".ignore"), ignore.as_bytes())?; } VersionControl::Fossil => { diff --git a/tests/testsuite/init.rs b/tests/testsuite/init.rs index 667bc6202..48d1f65c8 100644 --- a/tests/testsuite/init.rs +++ b/tests/testsuite/init.rs @@ -437,7 +437,7 @@ fn gitignore_appended_not_replaced() { } #[test] -fn gitignore_added_newline_if_required() { +fn gitignore_added_newline_in_existing() { fs::create_dir(&paths::root().join(".git")).unwrap(); File::create(&paths::root().join(".gitignore")) @@ -461,7 +461,26 @@ fn gitignore_added_newline_if_required() { } #[test] -fn mercurial_added_newline_if_required() { +fn gitignore_no_newline_in_new() { + fs::create_dir(&paths::root().join(".git")).unwrap(); + + assert_that( + cargo_process("init").arg("--lib").env("USER", "foo"), + execs().with_status(0), + ); + + assert_that(&paths::root().join(".gitignore"), existing_file()); + + let mut contents = String::new(); + File::open(&paths::root().join(".gitignore")) + .unwrap() + .read_to_string(&mut contents) + .unwrap(); + assert!(!contents.starts_with("\n")); +} + +#[test] +fn mercurial_added_newline_in_existing() { fs::create_dir(&paths::root().join(".hg")).unwrap(); File::create(&paths::root().join(".hgignore")) @@ -484,6 +503,25 @@ fn mercurial_added_newline_if_required() { assert!(contents.starts_with("first\n")); } +#[test] +fn mercurial_no_newline_in_new() { + fs::create_dir(&paths::root().join(".hg")).unwrap(); + + assert_that( + cargo_process("init").arg("--lib").env("USER", "foo"), + execs().with_status(0), + ); + + assert_that(&paths::root().join(".hgignore"), existing_file()); + + let mut contents = String::new(); + File::open(&paths::root().join(".hgignore")) + .unwrap() + .read_to_string(&mut contents) + .unwrap(); + assert!(!contents.starts_with("\n")); +} + #[test] fn cargo_lock_gitignored_if_lib1() { fs::create_dir(&paths::root().join(".git")).unwrap(); -- 2.30.2